#include <netinet/in.h>
#include <netdb.h>
#include <stdio.h>
#include <stdlib.h>
#include <arpa/inet.h>

//
// Created by spiro on 19-3-30.
//
int main(int argc, char **argv) {
    char **pp;
    struct in_addr addr;
    struct hostent *hostp;

    if (argc != 2) {
        fprintf(stderr, "usage: %s <domain name or dotted-decimal>\n", argv[0]);
        exit(-1);
    }

    if (inet_aton(argv[1], &addr) != 0) {
        printf("application ip: %s\n", argv[1]);
        printf("network ip: %X\n", addr.s_addr);
        hostp = gethostbyaddr(&addr, sizeof(addr), AF_INET);
    } else {
        hostp = gethostbyname(argv[1]);
    }

    if (hostp == NULL) {
        fprintf(stderr, "gethost failed.\n");
        exit(-1);
    }

    printf("official hostname: %s\n", hostp->h_name);
    for (pp = hostp->h_aliases;  *pp != NULL; pp++) {
        printf("alias: %s\n", *pp);
    }

    for (pp = hostp->h_addr_list; *pp != NULL; pp++) {
        addr.s_addr = ((struct in_addr *)*pp)->s_addr;
        printf("address: %s\n", inet_ntoa(addr));
    }

    return 0;
}
